/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucuenca.ec.nosql.controller;

import edu.ucuenca.ec.nosql.conexion.DriverMongoDB;
import edu.ucuenca.ec.nosql.modelos.Category;
import edu.ucuenca.ec.nosql.modelos.Producto;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author mivkys
 */
@ManagedBean(name = "productoController")
@SessionScoped
public class ProductoController implements Serializable {

    private Producto selected;
    private List<Producto> itemsProductos;
   private List<String> subCategorias;
    private String[] selectedsubCategorias;
private int id = 10;
    public ProductoController() {

    }

    @PostConstruct
    public void init() {
        subCategorias = new ArrayList<>();
        DriverMongoDB.setDB_Mongo("online");
        itemsProductos = DriverMongoDB.findAll("producto");
    }

    public void prepareCreate() {
        System.out.println("Si vino");
        selected = new Producto();
    }

    public void guardar() {
        if(selected==null)
            return;
        selected.setId(id);
        System.out.println("Sip");
        Category category = new Category();
        for (String selectedsubCategoria : selectedsubCategorias) {
            category.getSubCategory().add(selectedsubCategoria);
        }
        selected.getCategories().add(category);
        try {
        DriverMongoDB.insert(selected,"producto");
        }
         catch (IOException ex) {
            Logger.getLogger(ProductoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        itemsProductos = DriverMongoDB.findAll("producto");
        id+=1;
        selected = null;
    }

    /**
     * @return the selected
     */
    public Producto getSelected() {
        return selected;
    }

    /**
     * @param selected the selected to set
     */
    public void setSelected(Producto selected) {
        this.selected = selected;
    }

    /**
     * @return the itemsProductos
     */
    public List<Producto> getItemsProductos() {
        return itemsProductos;
    }

    /**
     * @param itemsProductos the itemsProductos to set
     */
    public void setItemsProductos(List<Producto> itemsProductos) {
        this.itemsProductos = itemsProductos;
    }

    /**
     * @return the subCategorias
     */
    public List<String> getSubCategorias() {
        Set<String> sets = new HashSet<>();
        for (Producto itemsProducto : itemsProductos) {
            sets.addAll(itemsProducto.subCategoriasSet());
            if (sets.size() >= 30) {
                break;
            }
        }
        subCategorias = new ArrayList<>(sets);

        return subCategorias;
    }

    /**
     * @param subCategorias the subCategorias to set
     */
    public void setSubCategorias(List<String> subCategorias) {
        this.subCategorias = subCategorias;
    }

    /**
     * @return the selectedsubCategorias
     */
    public String[] getSelectedsubCategorias() {
        return selectedsubCategorias;
    }

    /**
     * @param selectedsubCategorias the selectedsubCategorias to set
     */
    public void setSelectedsubCategorias(String[] selectedsubCategorias) {
        this.selectedsubCategorias = selectedsubCategorias;
    }
}
